iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0

前言

前天和昨天,我們進行promptTemplate和langServe快速部屬api的操作範例,但今天介紹及說明另外一個核心功能,結構化輸出structured_output,將LLM的輸出變成特定格式,此功能我們會在之後的LangGraph上常常看見。

正文

支援模型

Pydantic class

Pydantic 允許定義class來限制資料的格式和類型,實際上會在創建物件時,自動驗證資料類型和格式,如果資料不符合定義的類型和格式,Pydantic 就會throw expection。
LangChain 使用 Pydantic 確保傳遞給chain或agent的資料格式和類型是正確的,避免執行時發生錯誤。

  • 先import 相關的class
from langchain_core.pydantic_v1 import BaseModel, Field
  • 接著展示範例
  • 例如一個笑話的資料結構
# pydantic class
class Joke(BaseModel):
    """Joke to tell user."""

    setup: str = Field(description="笑話的設定")
    punchline: str = Field(description="笑話有趣的重點")
    rating: int = Field(
        description="這個笑話的評分,從1到10")

當使用pydantic class當作輸入時,模型的輸出也會是pydantic class。
輸出

structured_llm = model.with_structured_output(Joke)

structure_joke = structured_llm.invoke("告訴我一個關於貓的笑話")

print(structure_joke)

完整程式碼

import os
from langchain_openai import ChatOpenAI
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field

# 1. Create model
os.environ["OPENAI_API_KEY"] = "你的OpenAI api key"

model = ChatOpenAI(model="gpt-4o")


# 2. pydantic class
class Joke(BaseModel):
    """Joke to tell user."""

    setup: str = Field(description="笑話的設定")
    punchline: str = Field(description="笑話有趣的重點")
    rating: int = Field(
        description="這個笑話的評分,從1到10")


structured_llm = model.with_structured_output(Joke)

structure_joke = structured_llm.invoke("告訴我一個關於貓的笑話")

print(structure_joke)

輸出結果

setup='為什麼貓咪不喜歡上網?' punchline='因為牠們怕滑鼠!' rating=7

pydantic class的參數的名稱和提供的描述也非常重要,可以將這些資訊視為提示的一部份。


Json Format

當然也可以輸出成Json,若需要更詳細的資料可以參考
https://python.langchain.com/v0.2/docs/how_to/structured_output/#typeddict-or-json-schema

需要如下的修改

structured_llm = model.with_structured_output(method="json_mode")

structure_joke = structured_llm.invoke(
    "告訴我一個關於貓的笑話,用JSON回應並且有`setup`和`punchline`和`rating`這些關鍵字")

print(structure_joke)

輸出結果

{'setup': '為什麼貓咪不玩撲克牌?', 'punchline': '因為牠們怕老虎(Tiger)!', 'rating': 7}

上一篇
day5 LangServe快速部屬應用程式:兩人對話劇本產生器
下一篇
day7 RAG 的力量:將檢索與生成融合提升LLM的回應準確性
系列文
智能雲端架構圖生成:結合LangChain&LangGrpah與Rag的創新應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言